#pragma once
#include "orangepch.h"
#include "Core.h"
#include "Events/Event.h"

namespace Orange
{

	struct WindowProps
	{
		std::string Title;
		uint32_t Width;
		uint32_t Height;

		WindowProps(const std::string &title = "Rpg Engine", unsigned int width = 1280, unsigned int height = 720) : Title(title), Width(width), Height(height) {}
	};

	class Window
	{
	public:
		using EventCallbackFn = std::function<void(Event &)>;

		virtual ~Window(){};

		virtual void OnUpdate() = 0;

		virtual uint32_t GetWidth() const = 0;
		virtual uint32_t GetHeight() const = 0;

		virtual void SetEventCallback(const EventCallbackFn &callback) = 0;
		virtual void SetVSync(bool sync) = 0;
		virtual bool IsVSync() const = 0;

		virtual void ShutDown() = 0;

		virtual void *GetNativeWindow() const = 0;

		static Window *Create(const WindowProps &props = WindowProps());
	};
}